﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.IO;
using System.Windows.Forms;

namespace FiyatDegisikligi
{
    public class Printing
    {
        public Dictionary<string, int> Stoklar { get; set; }
        public string EtiketAdi { get; set; }
        public int DepoNo { get; set; }

        private Stok StokBul(string stokKodu, int depoNo)
        {
            Stok stk = null;
            DataTable dt = DataLayer.Get.Fill(string.Format("exec sp_executesql N'SELECT     STOKLAR.sto_kod, MAX(BARKOD_TANIMLARI.bar_kodu) AS barkod, STOKLAR.sto_isim, dbo.fn_StokSatisFiyati(STOKLAR.sto_kod, 1, {1}) AS fiyat1,dbo.fn_StokSatisFiyati(STOKLAR.sto_kod, 4, {1}) AS fiyat4,BARKOD_TANIMLARI.bar_barkodtipi FROM STOKLAR INNER JOIN BARKOD_TANIMLARI ON STOKLAR.sto_kod = BARKOD_TANIMLARI.bar_stokkodu WHERE (STOKLAR.sto_kod = ''{0}'') GROUP BY STOKLAR.sto_kod, STOKLAR.sto_isim,BARKOD_TANIMLARI.bar_barkodtipi'", stokKodu, depoNo));
            if (dt.Rows.Count > 0)
            {
                bool tip = false;
                if (dt.Rows[0][5].ToString() == "0")
                {
                    tip = true;
                }

                stk = new Stok()
                {
                    StokKodu = dt.Rows[0][0].ToString(),
                    Barkod = dt.Rows[0][1].ToString(),
                    StokAdi = dt.Rows[0][2].ToString(),
                    Fiyat1 = Cevir.Parse<decimal>(dt.Rows[0][3]),
                    Fiyat4 = Cevir.Parse<decimal>(dt.Rows[0][4]),
                    Ean13 = tip
                };
            }
            return stk;
        }


        private string ReadPrn(string fileName, Stok stk)
        {
            StringBuilder sb = new StringBuilder();
            if (File.Exists(fileName))
            {
                using (StreamReader sr = new StreamReader(fileName))
                {
                    string line = string.Empty;
                    while (sr.Peek() > -1)
                    {
                        line = sr.ReadLine();
                        if (line.IndexOf('@') > -1) // tanım satırı
                        {
                            string[] satir = line.Split('@');
                            string[] alanlar = satir[1].Split(',');
                            string alanAdi = alanlar[0];
                            int baslangic = Cevir.Parse<int>(alanlar[1]);
                            int uzunluk = Cevir.Parse<int>(alanlar[2]);
                            string deger = string.Empty;
                            switch (alanAdi)
                            {
                                case "STOKKODU":
                                    deger = Cevir.Mid(stk.StokKodu, baslangic, uzunluk);
                                    break;
                                case "STOKADI":
                                    deger = Cevir.Mid(stk.StokAdi, baslangic, uzunluk);
                                    break;
                                case "BARKODU":
                                    deger = Cevir.Mid(stk.Barkod, baslangic, uzunluk);
                                    break;
                                case "FIYAT1":
                                    deger = Cevir.Mid(stk.Fiyat1.ToString("n" + uzunluk), 0, baslangic);
                                    break;
                                case "FIYAT4":
                                    deger = Cevir.Mid(stk.Fiyat4.ToString("n" + uzunluk), 0, baslangic);
                                    break;
                                case "TARIH":
                                    deger = Cevir.Mid(DateTime.Now.ToShortDateString(), baslangic, uzunluk);
                                    break;
                            }
                            sb.Append(satir[0] + deger + satir[2] + "\r\n");
                        }
                        else
                        {
                            sb.AppendLine(line);
                        }
                    }
                    sr.Close();
                }
            }
            return sb.ToString();
        }

        public void Print()
        {
            string ean8Dizayn = "";
            string ean13Dizayn = "";
            string yaziciYolu = "";

            if (File.Exists(Application.StartupPath + "\\etiket_dizaynlari.txt"))
            {
                using (StreamReader sr = new StreamReader(Application.StartupPath + "\\etiket_dizaynlari.txt"))
                {
                    string line = string.Empty;
                    while (sr.Peek() > -1)
                    {
                        line = sr.ReadLine();
                        string[] alan = line.Split(';');
                        if (alan[0] == this.EtiketAdi)
                        {
                            yaziciYolu = alan[1];
                            ean13Dizayn = alan[2];
                            ean8Dizayn = alan[3];
                        }
                    }
                    sr.Close();
                }
            }
            else
                return;


            StringBuilder sb = new StringBuilder();
            foreach (KeyValuePair<string, int> key in Stoklar)
            {
                if (key.Value > 0)
                {
                    Stok stk = StokBul(key.Key, this.DepoNo);
                    if (stk != null)
                    {
                        if (stk.Ean13)
                        {
                            string deger = ReadPrn(ean13Dizayn, stk);
                            for (int i = 0; i < key.Value; i++)
                            {
                                sb.AppendLine(deger);
                            }
                        }
                        else
                        {
                            string deger = ReadPrn(ean8Dizayn, stk);
                            for (int i = 0; i < key.Value; i++)
                            {
                                sb.AppendLine(deger);
                            }
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(sb.ToString()) && !string.IsNullOrEmpty(yaziciYolu))
            {
                File.WriteAllText("temp.txt", sb.ToString());


                if (yaziciYolu.IndexOf(@"\") > -1)
                {
                    File.Copy("temp.txt", yaziciYolu + "\\temp.txt");
                }
                else
                {
                    File.Copy("temp.txt", yaziciYolu + ":");
                }

                MessageBox.Show("Tamamlandı!");
            }
        }


    }

    public class Stok
    {
        public string StokKodu { get; set; }
        public string StokAdi { get; set; }
        public string Barkod { get; set; }
        public decimal Fiyat4 { get; set; }
        public decimal Fiyat1 { get; set; }
        public bool Ean13 { get; set; }
    }

}
